<?php
class Upload extends CI_Controller {

    // Création du constructeur de la classe "Upload"
    function __construct(){
        parent::__construct();

        // Chargemenbt du helper 'form'
	$this->load->helper('form');
        $this->load->helper('assets');
        $this->load->helper('file');
	$this->load->library('form_validation');

        // Chargement de la base de données
        $this->load->database();

        // Chargement du modèle associé aux oeuvres
        $this->load->model('oeuvres_model');

    }

    function index(){

        // Chargement de la vue 'depot_view'
        $this->load->view('depot/popup');
    }

    function do_upload(){
        
        $status= "";
        $msg = "";
        $data = array();

        /* * * * * * * * * * * * * * * * * * * * * * * * * */
        /* WIP : upload ok, mais les fichiers ne sont pas  *
        /* enregistrés en base, et aucune vignette créée   *
        /* * * * * * * * * * * * * * * * * * * * * * * * * */
        
        // Récupération des données, issues de la partie client
        
        // Fichier à uploader
        $file_element_name = 'userfile';
        // Nom du fichier à uploader
        $file_name = $_POST['userfile'];
        // Coordonnées de dépose de l'oeuvre
	$oeuvres_locX = $_POST['oeuvres_locX'];
	$oeuvres_locY = $_POST['oeuvres_locY'];
        // Nom de la pensée choisie par l'utilisateur
	$pensee_nom = $_POST['pensee_nom'];

        // Récupération du plus grand id d'oeuvres présentes en base
        $last_oeuvre_id = $this->oeuvres_model->get_last_oeuvres_id();
        $last_oeuvre_id = $last_oeuvre_id[0];
        // En prévision, on assignera à notre fichier le nom 'id+1'
        $oeuvre_uploaded_name = $last_oeuvre_id->oeuvres_id +1;

        // On lui assignera également l'extension récupérée de son nom
        $file_name_exploded = explode(".", $file_name);
        $data['extension'] = $file_name_exploded[count($file_name_exploded)-1];
        $extension = $file_name_exploded[count($file_name_exploded)-1];

        // On vérifie l'extension afin d'enregistrer une oeuvre dans le bon répertoire
        // de notre système de fichiers
        if(($extension == 'gif') || ($extension == 'jpg') || ($extension == 'png')){
            $uploadfolder = 'images/';
            $type_oeuvre = 'image';
            $type_oeuvre_id = 1;
        }
        elseif ($extension == 'pdf'){
            $uploadfolder = 'documents/';
            $type_oeuvre = 'document';
            $type_oeuvre_id = 2;
        }
        elseif (($extension == 'mpg') || ($extension == 'MPG')){
            $uploadfolder = 'videos/';
            $type_oeuvre = 'video';
            $type_oeuvre_id = 3;
        }
        elseif ($extension == 'mp3'){
            $uploadfolder = 'audios/';
            $type_oeuvre = 'audio';
            $type_oeuvre_id = 4;
        }


        /* TRAITEMENT OEUVRE - ORIGINALE */

        // On regarde bien que le nom du fichier n'est pas vide
        if(empty($file_name))
        {
            $status = "error";
            $msg = "Vous n'avez pas sélectionné de fichier";
        }

        // Si le nom de fichier n'est pas vide
        if ($status != "error")
        {
            // On configure les paramètres d'upload
            $config = array();
            $config['upload_path'] = './oeuvres/originaux/'.$uploadfolder;
            $config['file_name'] = $oeuvre_uploaded_name.'.'.$extension;
            $config['allowed_types'] = 'mp3|pdf|mpg|MPG|gif|jpg|png';
            $config['max_size']  = '1000000000';
            $config['encrypt_name'] = false;

            // On upload le fichier grâce à la lib 'upload'
            $this->load->library('upload', $config);

            // Si l'upload ne s'est pas bien passé
            if (!$this->upload->do_upload($file_element_name)){
                $status = 'error';
                $msg = "erreur lors de l'upload"; //$this->upload->display_errors();
                echo json_encode(array('status' => $status, 'msg' => $msg));
            }
            // Si l'upload s'est bien passé
            else{
                $status = 'success';
                $msg = "Fichier importé avec succès";

                // On récupère les informations associées à l'oeuvre uploadée
                $file_uploaded = $this->upload->data();

                //Si on a réussi à uploader l'oeuvre, on peut créer une vignette
                /* TRAITEMENT OEUVRE - VIGNETTE */


                // Pour créer une vignette, il faut que le fichier uploadé
                // soit de type 'image' et peut-être plus tard une vidéo...
                
                if(($extension == 'pdf')){
                    $source = './oeuvres/vignettes/documents/doc.png';
                    $dest = './oeuvres/vignettes/documents/'.($last_oeuvre_id->oeuvres_id +1).'.png';
                    copy($source, $dest);
                    // création des bonnes vignettes
                }
                if(($extension == 'mp3')){
                    $source = './oeuvres/vignettes/audios/music.png';
                    $dest = './oeuvres/vignettes/audios/'.($last_oeuvre_id->oeuvres_id +1).'.png';
                    copy($source, $dest);
                }
                if(($extension == 'mpg')||('MPG')){
                    $source = './oeuvres/vignettes/videos/video.png';
                    $dest = './oeuvres/vignettes/videos/'.($last_oeuvre_id->oeuvres_id +1).'.png';
                    copy($source, $dest);
                }
                
                if(($extension == 'gif') || ($extension == 'jpg') || ($extension == 'png') /* || ($extension == 'mpg')*/ ){

                    // Configuration pour la création de vignette
                    $config['image_library'] = 'GD2';
                    $config['source_image'] = $file_uploaded['full_path'];
                    $config['new_image'] = './oeuvres/vignettes/images/';
                    $config['create_thumb'] = true;
                    $config['thumb_marker'] = '';
                    $config['maintain_ratio'] = false;
                    $config['width'] = 48;
                    $config['height'] = 48;

                    // Chargement de la librairie permettant de créer une vignette
                    // de l'oeuvre originale lors de l'upload
                    $this->load->library('image_lib',$config);

                    // Si le redimensionnement ne s'est pas bien passé
                    if ( ! $this->image_lib->resize()){

                        $status = 'error';
                        $msg = "erreur lors du redimensionnement"; //$this->upload->display_errors();
                        echo json_encode(array('status' => $status, 'msg' => $msg));
                    }
                    // Si le redimensionnement s'est bien passé
                    else{
                        
                        $status = 'success';
                        $msg = "Vignette créée avec succès";
                    }
                }
                else{
                    $status = 'success';
                    $msg = "Vignette créée avec succès";
                }

                
                
                /* Suite à un upload correct et à la création de la vignette suivant le type de fichier uploadé,
                MISE EN FORME DES DONNEES POUR ENREGISTREMENT EN BASE */

                // Suppression des espaces blancs inutiles
                $pensee_nom=str_replace(' ','',$pensee_nom);

                // On recherche l'id de la pensée sélectionnée par rapport à notre variable reçue en POST
                switch($pensee_nom){
                    case 'absurde':
                        $pensee_id = 1;
                        break;
                    case 'emotion':
                        $pensee_id = 2;
                        break;
                    case 'memoire':
                        $pensee_id = 3;
                        break;
                    case 'partage':
                        $pensee_id = 4;
                        break;
                    case 'parole':
                        $pensee_id = 5;
                        break;
                    case 'penser':
                        $pensee_id = 6;
                        break;
                    case 'reel':
                        $pensee_id = 7;
                        break;
                    case 'travail':
                        $pensee_id = 8;
                        break;
                    case 'valeur':
                        $pensee_id = 9;
                        break;
                }

                $datas = array('oeuvres_fichier'=>$uploadfolder.$oeuvre_uploaded_name.'.'.$extension, 'oeuvres_locX'=>$oeuvres_locX,'oeuvres_locY'=>$oeuvres_locY,'oeuvres_enfer'=>0,'fk_pensees_id'=>$pensee_id,'fk_types_id'=>$type_oeuvre_id);

                if( $this->oeuvres_model->add_oeuvres($datas) ){
                    $status = 'success';
                    $msg = "Fichier enregistré avec succès";
                    // Chargement de la vue de feedback suite au succès de l'enregistrement d'un nouveau collage
                    //$this->load->view("depot/upload_ok_view",$data);
                }
                else{
                    $status = 'error';
                    $msg = 'Problème d\'enregistrement en base de données';
                    echo json_encode(array('status' => $status, 'msg' => $msg));
                    // Chargement de la vue de feedback suite au succès de l'enregistrement d'un nouveau collage
                    //$this->load->view("depot/upload_nok_view");
                }

            }
            unset($config);
            @unlink($_FILES[$file_element_name]);
        }

        // RAF : Améliorer le tranfert JSON des données
        if($status == 'success'){
            echo json_encode(array('oeuvre_id' => $oeuvre_uploaded_name, 'oeuvre_fichier' => $uploadfolder.$oeuvre_uploaded_name.'.'.$extension, 'oeuvre_type' => $type_oeuvre, 'status' => $status, 'msg' => $msg));
        }
        else{
            echo json_encode(array('status' => $status, 'msg' => $msg));
        }

    }

}